草庐IT

C++ 空类或 typedef

全部标签

c++ - 为什么允许 std::atomic_{char,schar,etc.} typedef 是 std::atomic<T> 基类的类型定义,而不仅仅是 atomic<T>?

C++11[atomics.types.generic]p7:Thereshallbenamedtypescorrespondingtotheintegralspecializationsofatomic,asspecifiedinTable145,andanamedtypeatomic_boolcorrespondingtothespecifiedatomic.Eachnamedtypeisaeithertypedeftothecorrespondingspecializationorabaseclassofthecorrespondingspecialization.Ifitisa

c++ - 空类的默认构造函数是公共(public)的。但是怎么办?

我有一个简单的问题:classmy{};myob;编译器允许我创建一个有意义的对象。而且,我知道您不能在构造函数是私有(private)的情况下创建对象。在我看来,类中的所有内容都是private但显然不是默认构造函数(因为它允许我创建对象,因为默认构造函数应该是public).但是让我感到困惑的是,类中没有public部分。那么,在这种情况下,它创建一个public部分只是为了在它下面放置一个默认构造函数吗?或者有其他事情发生而我的理由不正确?此外,当创建/访问对象时,如何在内部组织/跟踪公共(public)、私有(private)和protected访问?我得到这个问题是因为我直到

c++ - C++ 标准是否允许使用 typedef 重命名构造函数?

我惊讶地发现在VC++10中,您可以使用typedef来更改类的构造函数的名称:#includeusingnamespacestd;classA{private:typedefAalias;public:alias(){cout这是标准C++还是Microsoft扩展? 最佳答案 没有;构造函数没有名字。您不能获取构造函数的地址或传递函数指针,甚至不能像普通函数一样调用它。语法A::A()只是一种特殊的声明符语法,允许您声明和定义构造函数,但它不是名称。就是说,无论如何,您不能对对象(包括函数指针)进行类型定义,只能类型。要评论MS

c++ - 是否可以将实现模板特化定义为另一种类型的 typedef?

我有一个类模板,我想为其引入几个模板特化。这些模板特化与某些现有类型相同。从概念上讲,我想将它们实现为别名/typedef。下面的示例代码应该显示我想要做什么:templateclassCommon{///generalimplementation};classTypeZ;templateclassCommon=TypeZ;//classCommon=TypeZ;templateclassCommon=TypeZ;在C++(或C++11)中,以上内容是否可以某种方式实现?如果我不必实现Common就好了作为继承TypeZ的类-实际代码比上面显示的更复杂并且继承了TypeZ这不是一个好主

c++ - BOOST_FOREACH 和没有 typedef 的模板

当我使用BOOST_FOREACH时,简单的模板作为vector没有问题。但是,当我尝试遍历map>例如,我需要对元素类型进行typedef。有什么解决方法吗? 最佳答案 有一个问题,因为它是一个宏,因此不能处理包含逗号的类型(预处理器不知道模板)。您也可以在循环之前声明变量,参见documentation.std::mapmy_map;//1)typedefstd::pairMyPair;BOOST_FOREACH(MyPairp,my_map){...}//2)std::pairp;BOOST_FOREACH(p,my_map)

c++ - typedef 如何用于函数指针

我想我可能患有可怕的“意外程序员”病,至少在涉及到typedef和函数指针时。所以我一直在试验涉及这些的各种组合,以根据我得到的所有输出来分析结果。但随着我不断尝试不同的组合,而不是分析结果,我现在只是迷失在过程中。我希望你们能帮我解决这个问题。第一个代码示例typedefvoid(print)(void);voiddo_something(void){printf("HelloWorld\n");}print*pr;pr=&do_something;pr();//HelloWorld第二个代码示例typedefvoid(print)(void);voiddo_something(vo

c++ - 通过 typedef 显式模板实例化

如果我有typedefFooFoof;为什么我不能像这样显式实例化模板templateclassFoof;除了输入Foo是否有解决方法?? 最佳答案 andisthereaworkaroundapartfromtypingFoo?不,不幸的是没有。您必须输入Foo.至于为什么,请参阅规则的C++标准的14.7.2条款3(虽然我不知道规则背后的基本原理)。 关于c++-通过typedef显式模板实例化,我们在StackOverflow上找到一个类似的问题: ht

c++ - 容器优化:为什么 STL 容器方法参数不再使用 allocator::const_reference typedef?

阅读之前:const_reference是typedef,不需要是constT&正如您在std::vector::const_reference=bool中看到的那样.请在阅读其余部分时牢记这一点以正确理解它(正如评论中所建议的那样,这对很多人来说很难)。我想为简单类型(例如int)使用STL容器,但发现它们使用了次优的constT&“反模式”-它适用于大类,但在未内联时对于简单/基本类型不是最优的-考虑嵌入式系统,例如在ARM/ATSAM4L上,带有实例化。问题是:为什么例如vector::push_back使用(constvalue_type&)的参数重新设计而不是自C++11以来

c++ - 为什么不能创建空类的 const 对象

#includeclassA{public:voidfoo()const{std::cout上面的代码无法编译,有大佬告诉我为什么吗? 最佳答案 您需要对其进行初始化。Thisisaknownproblemwiththespec. 关于c++-为什么不能创建空类的const对象,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5335836/

c++ - c++ typedef std::function<> 如何使用?

你好,我正在做这个项目,在头文件中定义了以下内容typedefstd::functionHashFunction;我如何将它与我的HashFunction一起使用?当我尝试HashFunctionmyHashFunction;myHashFunction("mystring");程序崩溃。 最佳答案 std::function类型的对象行为非常像一个函数指针,指向一个带有签名Signature的函数.默认构造std::function只是还没有指向任何函数。std::function之间的主要区别和一个函数指针Signature*是